package pe.gob.mtpe.renoccsys.managedBeans;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.apache.commons.collections.map.HashedMap;
import net.sf.jasperreports.engine.JRException;

import org.primefaces.component.api.UIData;
import org.primefaces.context.RequestContext;

import com.ocpsoft.shade.org.apache.commons.beanutils.BeanUtils;

import pe.gob.mtpe.renoccsys.bean.Departamento;
import pe.gob.mtpe.renoccsys.bean.DescripcionTipoEmpresa;
import pe.gob.mtpe.renoccsys.bean.Distrito;
import pe.gob.mtpe.renoccsys.bean.Empleador;
import pe.gob.mtpe.renoccsys.bean.Lugejeobr;
import pe.gob.mtpe.renoccsys.bean.ParamConsultaRenocc;
import pe.gob.mtpe.renoccsys.bean.Persona;
import pe.gob.mtpe.renoccsys.bean.Provincia;
import pe.gob.mtpe.renoccsys.bean.Regional;
import pe.gob.mtpe.renoccsys.bean.Renocc;
import pe.gob.mtpe.renoccsys.bean.TipempresaC;
import pe.gob.mtpe.renoccsys.bean.TipoDocumentoIdentidad;
import pe.gob.mtpe.renoccsys.bean.TipoVia;
import pe.gob.mtpe.renoccsys.bean.Usuario;
import pe.gob.mtpe.renoccsys.bean.Zonal;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.CantraDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.EmpleadorDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.LugejeobrDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.MantenimientoDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.PersonaDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.RenoccDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.ResobraDespatch;
import pe.gob.mtpe.renoccsys.mybatis.despachadores.TipempresaDespatch;
import pe.gob.mtpe.renoccsys.reniecws.ReniecWebService;
import pe.gob.mtpe.renoccsys.utils.FacesUtils;
import pe.gob.mtpe.renoccsys.utils.Utilitario;
import pe.gob.sunat.tecnologia.menu.bean.UsuarioBean;
import sun.security.util.PendingException;

@ManagedBean(name = "renoccBean")
@SessionScoped
public class RenoccBean {

	private Renocc renocc;
	private Persona personaRenocc;
	private Persona personaMan;
	private List<TipempresaC> lstTipoEmpresa;
	private List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad;
	private List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad1;
	private List<Empleador> lstMunicipadad;
	private Empleador objMunicipalidad;
	private ParamConsultaRenocc objParametrosConsultaRenocc;
	private long corrRenocBusqueda;

	// SERVICIOS
	private EmpleadorDespatch servicioEmpleador = new EmpleadorDespatch();
	private PersonaDespatch servicioPersona = new PersonaDespatch();
	private MantenimientoDespatch servicioMantenimiento = new MantenimientoDespatch();
	private RenoccDespatch servicioRenocc = new RenoccDespatch();
	private LugejeobrDespatch servicioLugejeobr = new LugejeobrDespatch();
	private ResobraDespatch servicioResobra = new ResobraDespatch();
	private TipempresaDespatch servicioTipEmpresa = new TipempresaDespatch();
	private CantraDespatch servicioCantra = new CantraDespatch();

	private List<Departamento> lstDepartamento;
	private List<Provincia> lstProvincia;
	private List<Distrito> lstDistrito;

	private List<Departamento> lstDepartamentoBusqueda;
	private List<Provincia> lstProvinciaBusqueda;
	private List<Distrito> lstDistritoBusqueda;

	private List<Renocc> lstBusquedaRenocc;

	private List<TipoVia> lstTipoVia;

	private List<Regional> lstRegional;

	private List<Zonal> lstZonal;

	private UIData lugarDataTable;

	private Utilitario objUtilitario = new Utilitario();

	private String strAccion;

	// usuario de la sesion
	@ManagedProperty("#{loginBean.PGP_Usuario}")
	private Usuario PGP_Usuario;

	@ManagedProperty("#{loginBean.penienteActualizacion}")
	private boolean penienteActualizacion;

	private boolean muestraMenConstrancia;

	public RenoccBean() {
		inicializar();
	}

	private void inicializar() {
		renocc = new Renocc();
		objMunicipalidad = new Empleador();
		lstTipoEmpresa = new ArrayList<TipempresaC>();
		lstTipoDocumentoIdentidad = new ArrayList<TipoDocumentoIdentidad>();
		lstTipoDocumentoIdentidad1 = new ArrayList<TipoDocumentoIdentidad>();
		lstDepartamento = new ArrayList<Departamento>();
		lstProvincia = new ArrayList<Provincia>();
		lstDistrito = new ArrayList<Distrito>();

		lstDepartamentoBusqueda = new ArrayList<Departamento>();
		lstProvinciaBusqueda = new ArrayList<Provincia>();
		lstDistritoBusqueda = new ArrayList<Distrito>();

		lstMunicipadad = new ArrayList<Empleador>();
		lstTipoVia = new ArrayList<TipoVia>();

		personaRenocc = new Persona();
		personaMan = new Persona();

		objParametrosConsultaRenocc = new ParamConsultaRenocc();

		lstTipoEmpresa = servicioMantenimiento.listarTipoEmpresa();
		lstTipoDocumentoIdentidad = servicioMantenimiento
				.listarTipoDocumentoIdentidad();
		lstTipoDocumentoIdentidad1 = servicioMantenimiento
				.listarTipoDocumentoIdentidad1();

		lstDepartamento = servicioMantenimiento.listarDepartamento();
		lstDepartamentoBusqueda = servicioMantenimiento.listarDepartamento();

		lstTipoVia = servicioMantenimiento.listarTipoVia();
		renocc.getObjLugarEjecucionObra().setObjDistrito(new Distrito());
	}

	public void clear() {
		RequestContext context = RequestContext.getCurrentInstance();
		lstDepartamento = new ArrayList<Departamento>();
		lstProvincia = new ArrayList<Provincia>();
		lstDistrito = new ArrayList<Distrito>();
		lstBusquedaRenocc = new ArrayList<Renocc>();
		objParametrosConsultaRenocc = new ParamConsultaRenocc();
		context.update("formListalstRenocc");
	}

	public String redNuenoRenocc() {
		String vista = "";
		try {
			strAccion = "R";
			renocc = new Renocc();
			renocc.getObjEmpresa().setV_codemp(PGP_Usuario.getV_ruc());
			renocc.getObjEmpresa().setV_razsoc(PGP_Usuario.getV_razn_Soc());

			vista = "pretty:mantGesionObra";
		} catch (Exception e) {
			vista = "pretty:gesionObra";
			e.printStackTrace();
		}
		return vista;
	}

	/*************************************** GET SET ***************************************************/

	public Renocc getRenocc() {
		return renocc;
	}

	public Persona getPersonaMan() {
		return personaMan;
	}

	public void setPersonaMan(Persona personaMan) {
		this.personaMan = personaMan;
	}

	public void setRenocc(Renocc renocc) {
		this.renocc = renocc;
	}

	public String getStrAccion() {
		return strAccion;
	}

	public void setStrAccion(String strAccion) {
		this.strAccion = strAccion;
	}

	public Persona getPersonaRenocc() {
		return personaRenocc;
	}

	public void setPersonaRenocc(Persona personaRenocc) {
		this.personaRenocc = personaRenocc;
	}

	public List<TipempresaC> getLstTipoEmpresa() {
		return lstTipoEmpresa;
	}

	public void setLstTipoEmpresa(List<TipempresaC> lstTipoEmpresa) {
		this.lstTipoEmpresa = lstTipoEmpresa;
	}

	public List<TipoDocumentoIdentidad> getLstTipoDocumentoIdentidad() {
		return lstTipoDocumentoIdentidad;
	}

	public void setLstTipoDocumentoIdentidad(
			List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad) {
		this.lstTipoDocumentoIdentidad = lstTipoDocumentoIdentidad;
	}

	public List<Empleador> getLstMunicipadad() {
		return lstMunicipadad;
	}

	public void setLstMunicipadad(List<Empleador> lstMunicipadad) {
		this.lstMunicipadad = lstMunicipadad;
	}

	public Empleador getObjMunicipalidad() {
		return objMunicipalidad;
	}

	public void setObjMunicipalidad(Empleador objMunicipalidad) {
		this.objMunicipalidad = objMunicipalidad;
	}

	public List<Departamento> getLstDepartamento() {
		return lstDepartamento;
	}

	public void setLstDepartamento(List<Departamento> lstDepartamento) {
		this.lstDepartamento = lstDepartamento;
	}

	public List<Provincia> getLstProvincia() {
		return lstProvincia;
	}

	public void setLstProvincia(List<Provincia> lstProvincia) {
		this.lstProvincia = lstProvincia;
	}

	public List<Distrito> getLstDistrito() {
		return lstDistrito;
	}

	public void setLstDistrito(List<Distrito> lstDistrito) {
		this.lstDistrito = lstDistrito;
	}

	public List<TipoVia> getLstTipoVia() {
		return lstTipoVia;
	}

	public void setLstTipoVia(List<TipoVia> lstTipoVia) {
		this.lstTipoVia = lstTipoVia;
	}

	public List<TipoDocumentoIdentidad> getLstTipoDocumentoIdentidad1() {
		return lstTipoDocumentoIdentidad1;
	}

	public void setLstTipoDocumentoIdentidad1(
			List<TipoDocumentoIdentidad> lstTipoDocumentoIdentidad1) {
		this.lstTipoDocumentoIdentidad1 = lstTipoDocumentoIdentidad1;
	}

	public ParamConsultaRenocc getObjParametrosConsultaRenocc() {
		return objParametrosConsultaRenocc;
	}

	public void setObjParametrosConsultaRenocc(
			ParamConsultaRenocc objParametrosConsultaRenocc) {
		this.objParametrosConsultaRenocc = objParametrosConsultaRenocc;
	}

	public List<Departamento> getLstDepartamentoBusqueda() {
		return lstDepartamentoBusqueda;
	}

	public void setLstDepartamentoBusqueda(
			List<Departamento> lstDepartamentoBusqueda) {
		this.lstDepartamentoBusqueda = lstDepartamentoBusqueda;
	}

	public List<Provincia> getLstProvinciaBusqueda() {
		return lstProvinciaBusqueda;
	}

	public boolean isPenienteActualizacion() {
		return penienteActualizacion;
	}

	public void setPenienteActualizacion(boolean penienteActualizacion) {
		this.penienteActualizacion = penienteActualizacion;
	}

	public void setLstProvinciaBusqueda(List<Provincia> lstProvinciaBusqueda) {
		this.lstProvinciaBusqueda = lstProvinciaBusqueda;
	}

	public List<Distrito> getLstDistritoBusqueda() {
		return lstDistritoBusqueda;
	}

	public void setLstDistritoBusqueda(List<Distrito> lstDistritoBusqueda) {
		this.lstDistritoBusqueda = lstDistritoBusqueda;
	}

	public List<Renocc> getLstBusquedaRenocc() {
		return lstBusquedaRenocc;
	}

	public void setLstBusquedaRenocc(List<Renocc> lstBusquedaRenocc) {
		this.lstBusquedaRenocc = lstBusquedaRenocc;
	}

	public long getCorrRenocBusqueda() {
		return corrRenocBusqueda;
	}

	public void setCorrRenocBusqueda(long corrRenocBusqueda) {
		this.corrRenocBusqueda = corrRenocBusqueda;
	}

	public List<Regional> getLstRegional() {
		return lstRegional;
	}

	public void setLstRegional(List<Regional> lstRegional) {
		this.lstRegional = lstRegional;
	}

	public List<Zonal> getLstZonal() {
		return lstZonal;
	}

	public void setLstZonal(List<Zonal> lstZonal) {
		this.lstZonal = lstZonal;
	}

	public UIData getLugarDataTable() {
		return lugarDataTable;
	}

	public Usuario getPGP_Usuario() {
		return PGP_Usuario;
	}

	public void setPGP_Usuario(Usuario pGP_Usuario) {
		PGP_Usuario = pGP_Usuario;
	}

	public void setLugarDataTable(UIData lugarDataTable) {
		this.lugarDataTable = lugarDataTable;
	}

	public boolean isMuestraMenConstrancia() {
		return muestraMenConstrancia;
	}

	public void setMuestraMenConstrancia(boolean muestraMenConstrancia) {
		this.muestraMenConstrancia = muestraMenConstrancia;
	}

	public void limpiarLugarEjecucion() {
		renocc.setListaLugarEjecucionObra(new ArrayList<Lugejeobr>());
		renocc.setObjLugarEjecucionObra(new Lugejeobr());
		lstDistrito = new ArrayList<Distrito>();
		lstProvincia = new ArrayList<Provincia>();

	}

	public void agregarLugarEjecucion() throws Exception {
		System.out.println("Llega al buscar lugar");
		renocc.getObjLugarEjecucionObra().valuestoString();
		if (renocc.getObjLugarEjecucionObra().getObjDepartamento()
				.getV_coddep() != null
				&& renocc.getObjLugarEjecucionObra().getObjProvincia()
						.getV_codpro() != null
				&& renocc.getObjLugarEjecucionObra().getObjDistrito()
						.getV_coddis() != null) {

			Departamento d = new Departamento();
			d = servicioMantenimiento.listarDepartamentoxCodigo(
					renocc.getObjLugarEjecucionObra().getObjDepartamento())
					.get(0);
			renocc.getObjLugarEjecucionObra().setObjDepartamento(d);

			Provincia p = new Provincia();
			for (Provincia prov : servicioMantenimiento.listarProvincia(d)) {
				if (prov.getV_codpro().equals(
						renocc.getObjLugarEjecucionObra().getObjProvincia()
								.getV_codpro())) {
					p = prov;
				}
			}
			renocc.getObjLugarEjecucionObra().setObjProvincia(p);

			Distrito ds = new Distrito();
			for (Distrito dis : servicioMantenimiento.listarDistrito(p)) {
				System.out.println(dis.getV_coddis()
						+ "="
						+ renocc.getObjLugarEjecucionObra().getObjDistrito()
								.getV_coddis());
				if (dis.getV_coddis().equals(
						renocc.getObjLugarEjecucionObra().getObjDistrito()
								.getV_coddis())) {

					ds = dis;
				}
			}
			renocc.getObjLugarEjecucionObra().setObjDistrito(ds);

			renocc.getListaLugarEjecucionObra().add(
					renocc.getObjLugarEjecucionObra());
			renocc.setObjLugarEjecucionObra(new Lugejeobr());

		} else {
			FacesUtils.showFacesMessage(
					"Debe seleccionar Región, Provincia y Distrito", 1);
		}

	}

	public void mostrarConstancia() throws Exception {
		try {
			List<Map> lstContacncia = new ArrayList<Map>();

			lstContacncia = servicioRenocc
					.mostrarConstancia(objParametrosConsultaRenocc);
			Map parameters = new HashedMap();
			parameters.put(
					"PV_RUTA_IMAGEN",
					FacesContext
							.getCurrentInstance()
							.getExternalContext()
							.getRealPath(
									"/resources/images/logos/logo_mtpe.png"));
			parameters.put(
					"PV_RUTA_IMAGEN2",
					FacesContext
							.getCurrentInstance()
							.getExternalContext()
							.getRealPath(
									"/resources/images/logos/logo_mtpe2.png"));
			FacesUtils.mostrarReporte(parameters, "Constancia_Renocc.jrxml",
					lstContacncia, "reporte_Renocc");
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void mostrarConstancia2() throws Exception {
		System.out.println("renocc.getnCorrenocc() " + renocc.getnCorrenocc());
		objParametrosConsultaRenocc.setnCorrenocc(renocc.getnCorrenocc());
		try {
			List<Map> lstContacncia = new ArrayList<Map>();

			lstContacncia = servicioRenocc
					.mostrarConstancia(objParametrosConsultaRenocc);
			Map parameters = new HashedMap();
			parameters.put(
					"PV_RUTA_IMAGEN",
					FacesContext
							.getCurrentInstance()
							.getExternalContext()
							.getRealPath(
									"/resources/images/logos/logo_mtpe.png"));
			parameters.put(
					"PV_RUTA_IMAGEN2",
					FacesContext
							.getCurrentInstance()
							.getExternalContext()
							.getRealPath(
									"/resources/images/logos/logo_mtpe2.png"));
			FacesUtils.mostrarReporte(parameters, "Constancia_Renocc.jrxml",
					lstContacncia, "reporte_Renocc");
		} catch (JRException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void buscarEmpresa() {
		List<Empleador> listaEmpleador = new ArrayList<Empleador>();

		try {

			listaEmpleador = servicioEmpleador.lstBusEmpleador1(renocc
					.getObjEmpresa());

			if (listaEmpleador.size() > 0) {
				renocc.setObjEmpresa(listaEmpleador.get(0));

			} else {
				FacesUtils.showFacesMessage("No se encontró empresa", 1);
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void buscarRepresentanteLegal() {
		List<Persona> listarPersona = new ArrayList<Persona>();

		try {
			// REALIZA BUSQUEDA EN BD MINTRA
			System.out
					.println("renocc.getObjRepresentanteLegal().getV_codtdocide() "
							+ renocc.getObjRepresentanteLegal()
									.getV_codtdocide());
			System.out
					.println("renocc.getObjRepresentanteLegal().getV_numdoc() "
							+ renocc.getObjRepresentanteLegal().getV_numdoc());

			if (renocc.getObjRepresentanteLegal().getV_codtdocide()
					.equals("03")) {
				// VERIFICACION POR WEBSERVICE SI DOCIDE ES DNI
				// WS
				// ReniecWebService rws = new ReniecWebService();
				// Persona pex =
				// rws.obtenerPersonaSWReniec(renocc.getObjRepresentanteLegal());
				// Persona persona = pex;
				Persona persona = servicioPersona.getTrabajador(renocc
						.getObjRepresentanteLegal());
				if (persona != null) {
					// System.out.println("nombres: "+pex.getV_nombres());
					renocc.setObjRepresentanteLegal(persona);
				} else {
					System.out.println("persona es nulo VERIFICANDO EN RENIEC");
					// VERIFICACION POR WEBSERVICE SI DOCIDE ES DNI
					// WS
					/*
					 * ReniecWebService rws = new ReniecWebService(); Persona
					 * pex =
					 * rws.obtenerPersonaSWReniec(renocc.getObjRepresentanteLegal
					 * ()); if (pex!=null) {
					 * System.out.println("ENCONTRO EN WEB SERVICE");
					 * renocc.setObjRepresentanteLegal(pex); } else {
					 */
					System.out
							.println("TAMPOCO ENCONTRÓ EN WEB SERVICE, SE DEBERÁ REGISTRAR EN SITB_PERSONA MANUALMENTE");
					RequestContext context = RequestContext
							.getCurrentInstance();
					personaMan = new Persona();
					personaMan.setV_codtdocide(renocc
							.getObjRepresentanteLegal().getV_codtdocide());
					personaMan.setV_numdoc(renocc.getObjRepresentanteLegal()
							.getV_numdoc());
					context.execute("dlg1.show()");
					context.reset("formRegistrarPersona");
					context.update("formRegistrarPersona");
					FacesUtils.setSessionAttribute("flgUpdate", "RL");
					// }

					// System.out.println("persona es nulo");
					// FacesUtils.showFacesMessage("No se encontraron datos del representante legal",1);
				}
				// FIN WS
			} else {
				// APLICA PARA OTROS TIPOS DE DOCUMENTO
				listarPersona = servicioPersona.listarPersona(renocc
						.getObjRepresentanteLegal());
				if (listarPersona.size() > 0) {
					renocc.setObjRepresentanteLegal(listarPersona.get(0));
				} else {
					RequestContext context = RequestContext
							.getCurrentInstance();
					personaMan = new Persona();
					personaMan.setV_codtdocide(renocc
							.getObjRepresentanteLegal().getV_codtdocide());
					personaMan.setV_numdoc(renocc.getObjRepresentanteLegal()
							.getV_numdoc());
					context.execute("dlg1.show()");
					context.reset("formRegistrarPersona");
					context.update("formRegistrarPersona");
					FacesUtils.setSessionAttribute("flgUpdate", "RL");
					// FacesUtils.showFacesMessage("No se encontraron datos del representante legal",1);
					// LEVANTAR POPUP PARA REGISTRO DE PERSONA
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public void buscarMunicipalidad() {
		try {
			renocc.getObjMunicipalidad().valuesToString();
			if ((renocc.getObjMunicipalidad().getV_numruc() == null || renocc
					.getObjMunicipalidad().getV_numruc().length() == 0)
					&& (renocc.getObjMunicipalidad().getV_razsoc() == null || renocc
							.getObjMunicipalidad().getV_razsoc().length() == 0)) {
				System.out
						.println("DEBE INGRESAR ALGUN PARAMETRO PARA LA BUSQUEDA");
				FacesUtils.showFacesMessage(
						"Debe ingresar algun criterio de busqueda", 1);
				RequestContext context = RequestContext.getCurrentInstance();
				context.reset(":formBusquedaEmpresa");
				context.update(":formBusquedaEmpresa:msgMensajeslstEmp");

			} else {
				if (renocc.getObjMunicipalidad().getV_razsoc().length() == 0
						&& renocc.getObjMunicipalidad().getV_numruc().length() > 0) {
					if (renocc.getObjMunicipalidad().getV_numruc().length() == 11) {
						System.out.println("BUSCANDO POR NUMERO DE RUC");
						
						renocc.getObjMunicipalidad().setV_codemp(renocc.getObjMunicipalidad().getV_numruc());
						
						lstMunicipadad = servicioEmpleador
								.lstBusEmpleador1(renocc.getObjMunicipalidad());
						System.out.println("lstMunicipadad.size(): "
								+ lstMunicipadad.size());
					} else {
						FacesUtils.showFacesMessage(
								"El numero de RUC debe tener 11 digitos", 1);
						RequestContext context = RequestContext
								.getCurrentInstance();
						context.reset(":formBusquedaEmpresa");
						context.update(":formBusquedaEmpresa:msgMensajeslstEmp");
					}
				}
				if (renocc.getObjMunicipalidad().getV_razsoc().length() > 0
						&& renocc.getObjMunicipalidad().getV_numruc().length() == 0) {
					if (renocc.getObjMunicipalidad().getV_razsoc().length() >= 5) {
						System.out.println("BUSCANDO POR RAZON SOCIAL");
						lstMunicipadad = servicioEmpleador
								.lstBusEmpleador2(renocc.getObjMunicipalidad());
						System.out.println("lstMunicipadad.size(): "
								+ lstMunicipadad.size());
					} else {
						FacesUtils.showFacesMessage(
								"Debe ingresar un minimo de 5 letras", 1);
						RequestContext context = RequestContext
								.getCurrentInstance();
						context.reset(":formBusquedaEmpresa");
						context.update(":formBusquedaEmpresa:msgMensajeslstEmp");
					}
				}
			}

			/*
			 * if (renocc.getObjMunicipalidad().getV_numruc()!=null &&
			 * renocc.getObjMunicipalidad().getV_razsoc().length()==0) {
			 * System.out.println("BUSCA POR RUC"); lstMunicipadad =
			 * servicioEmpleador.lstBusEmpleador1(renocc.getObjMunicipalidad());
			 * } else if(renocc.getObjMunicipalidad().getV_numruc().length()==0
			 * && renocc.getObjMunicipalidad().getV_razsoc().length()>0){
			 * System.out.println("BUSCA POR RAZON SOCIAL"); lstMunicipadad =
			 * servicioEmpleador.lstBusEmpleador2(renocc.getObjMunicipalidad());
			 * }else { System.out.println("DOBLE PARAMETRO ENCONTRADO");
			 * lstMunicipadad = null; }
			 */

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// /////////CARGA LA MUNICIPALIDAD EN EL GRID SOLICITADO
	public void setearMunicipalidad() {
		System.out.println("ENTRA A SETEAR MUNICIPALIDAD");
		renocc.setObjMunicipalidad(objMunicipalidad);
		System.out.println("renocc.getObjMunicipalidad().getV_numruc() "
				+ renocc.getObjMunicipalidad().getV_numruc());
		System.out.println("renocc.getObjMunicipalidad().getV_razsoc() "
				+ renocc.getObjMunicipalidad().getV_razsoc());

	}

	// ///ACTION QUE LIMPIA LOS CRITERIOS DE BUSQUEDA DE MUNICIPALIDAD
	public void btnBuscarMuni() {
		renocc.setObjMunicipalidad(new Empleador());
		lstMunicipadad = new ArrayList<Empleador>();
		RequestContext context = RequestContext.getCurrentInstance();
		context.update("formBusquedaEmpresa");
	}

	public void cargarProvincia() {

		Departamento departamento = new Departamento();
		if (!renocc.getObjLugarEjecucionObra().getObjDepartamento()
				.getV_coddep().equals("-1")) {

			departamento.setV_coddep(renocc.getObjLugarEjecucionObra()
					.getObjDepartamento().getV_coddep());
			lstProvincia = servicioMantenimiento.listarProvincia(departamento);
		} else {
			lstProvincia = new ArrayList<Provincia>();
		}

		System.out.println("COD DEPARTEMANTO " + departamento.getV_coddep());

		if (renocc.getVflgAmb().equals("N")) {
			lstRegional = new ArrayList<Regional>();
			lstRegional = servicioMantenimiento.listarRegional(departamento);
		}

		/*
		 * Map<String,String> params =
		 * FacesContext.getCurrentInstance().getExternalContext
		 * ().getRequestParameterMap();
		 * 
		 * String d = params.get("descripcionDepartamento");
		 * System.out.println("DEPARTAMENTO "+d);
		 */

	}

	public void cargarDistrito() {

		if (!renocc.getObjLugarEjecucionObra().getObjProvincia().getV_codpro()
				.equals("-1")) {
			Provincia provincia = new Provincia();
			provincia.setV_coddep(renocc.getObjLugarEjecucionObra()
					.getObjDepartamento().getV_coddep());
			provincia.setV_codpro(renocc.getObjLugarEjecucionObra()
					.getObjProvincia().getV_codpro());
			lstDistrito = servicioMantenimiento.listarDistrito(provincia);
		} else {
			lstDistrito = new ArrayList<Distrito>();
		}

	}

	public void setearDistrito() {
		System.out.println("CODIGO SETEADO DISTRITO "
				+ renocc.getObjLugarEjecucionObra().getObjDistrito()
						.getV_coddis());
	}

	public void cargarZonal() {
		Regional regional = new Regional();
		regional.setvCodreg(renocc.getObjLugarEjecucionObra().getvCodreg());
		lstZonal = new ArrayList<Zonal>();
		lstZonal = servicioMantenimiento.listarZonal(regional);

	}

	public void cargarProvinciaBusqueda() {

		if (!objParametrosConsultaRenocc.getCodDep().equals("-1")) {
			Departamento departamento = new Departamento();
			departamento.setV_coddep(objParametrosConsultaRenocc.getCodDep());
			lstProvinciaBusqueda = servicioMantenimiento
					.listarProvincia(departamento);
		} else {
			lstProvinciaBusqueda = new ArrayList<Provincia>();
		}

	}

	public void cargarDistritoBusqueda() {

		if (!objParametrosConsultaRenocc.getCodProv().equals("-1")) {
			Provincia provincia = new Provincia();
			provincia.setV_coddep(objParametrosConsultaRenocc.getCodDep());
			provincia.setV_codpro(objParametrosConsultaRenocc.getCodProv());
			lstDistritoBusqueda = servicioMantenimiento
					.listarDistrito(provincia);
		} else {
			lstDistritoBusqueda = new ArrayList<Distrito>();
		}

	}

	public void buscarResponsableObra() {
		List<Persona> listarPersona = new ArrayList<Persona>();

		try {
			// REALIZA BUSQUEDA EN BD MINTRA
			// ENCONTRÓ -------------- NO ENCONTRÓ
			// *** SI ENCONTRÓ:
			// VERIFICA SI LA INF ESTÁ ACTUALIZADA CON LA INF DE RENIEC
			// +++ SI ESTÁ ACTUALIZADA, MUESTRA LOS DATOS
			// +++ SI NO ESTA ACTUALIZADA, ACTUALIZA CON LOS DATOS DE RENIEC Y
			// POSTERIORMENTE MUESTRA LOS DATOS
			// *** SI NO ENCONTRÓ:
			// TRAE LOS DATOS DE RENIEC, GRABA EN BDMINTRA Y LUEGO MUESTRA LOS
			// DATOS

			if (renocc.getObjResponsableObra().getObjPersona()
					.getV_codtdocide().equals("03")) {

				// VERIFICACION POR WEBSERVICE SI DOCIDE ES DNI
				// WS
				// ReniecWebService rws = new ReniecWebService();
				// Persona pex =
				// rws.obtenerPersonaSWReniec(renocc.getObjResponsableObra().getObjPersona());
				Persona persona = servicioPersona.getTrabajador(renocc
						.getObjResponsableObra().getObjPersona());
				if (persona != null) {
					// System.out.println("nombres: "+pex.getV_nombres());
					renocc.getObjResponsableObra().setObjPersona(persona);
				} else {
					System.out
							.println("PERSONA ES NULO,PROCEDE A BUSCAR EN RENIEC");

					// VERIFICACION POR WEBSERVICE SI DOCIDE ES DNI
					// WS
					/*
					 * ReniecWebService rws = new ReniecWebService(); Persona
					 * pex =
					 * rws.obtenerPersonaSWReniec(renocc.getObjResponsableObra
					 * ().getObjPersona());
					 * 
					 * if (pex!=null) {
					 * System.out.println("ENCONTRO EN RENIEC");
					 * renocc.getObjResponsableObra().setObjPersona(pex); } else
					 * {
					 */
					System.out
							.println("TAMPOCO ENCONTRO EN RENIEC, DEBERA REGISTRAR EN SITB_PERSONA");
					RequestContext context = RequestContext
							.getCurrentInstance();
					personaMan = new Persona();
					personaMan.setV_codtdocide(renocc.getObjResponsableObra()
							.getObjPersona().getV_codtdocide());
					personaMan.setV_numdoc(renocc.getObjResponsableObra()
							.getObjPersona().getV_numdoc());
					context.execute("dlg1.show()");
					context.reset("formRegistrarPersona");
					context.update("formRegistrarPersona");
					FacesUtils.setSessionAttribute("flgUpdate", "RO");
					// }
					// FacesUtils.showFacesMessage("No se encontraron datos del responsable de obra",1);
				}
				// FIN WS

			} else {
				listarPersona = servicioPersona.listarPersona(renocc
						.getObjResponsableObra().getObjPersona());

				if (listarPersona.size() > 0) {
					renocc.getObjResponsableObra().setObjPersona(
							listarPersona.get(0));
				} else {
					RequestContext context = RequestContext
							.getCurrentInstance();
					personaMan = new Persona();
					personaMan.setV_codtdocide(renocc.getObjResponsableObra()
							.getObjPersona().getV_codtdocide());
					personaMan.setV_numdoc(renocc.getObjResponsableObra()
							.getObjPersona().getV_numdoc());
					context.execute("dlg1.show()");
					context.reset("formRegistrarPersona");
					context.update("formRegistrarPersona");
					FacesUtils.setSessionAttribute("flgUpdate", "RO");
					// FacesUtils.showFacesMessage("No se encontró responsable de obra",
					// 1);
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String registrarRenocc() {
		String vista = "";
		boolean validasizelist = true;
		System.out.println("ENTRO A INSERTAR RENOCC");
		String texto = "";
		RequestContext context = RequestContext.getCurrentInstance();

		try {

			renocc.setdFechabact(objUtilitario.fechaHabilitacion(
					renocc.getdFecins(), 3));

			System.out.println("########## MUNIC: "
					+ renocc.getObjMunicipalidad().getV_numruc()
					+ renocc.getObjMunicipalidad().getV_codemp() + " "
					+ renocc.getObjMunicipalidad().getV_razsoc() + " / ACCION:"
					+ strAccion);
			renocc.valuesToString();

			System.out.println("getV_coddep:"
					+ renocc.getObjLugarEjecucionObra().getObjDepartamento()
							.getV_coddep()
					+ " /getV_codpro:"
					+ renocc.getObjLugarEjecucionObra().getObjProvincia()
							.getV_codpro()
					+ " /getV_coddis:"
					+ renocc.getObjLugarEjecucionObra().getObjDistrito()
							.getV_coddis() + " /getvCodtvia:"
					+ renocc.getObjLugarEjecucionObra().getvCodtvia()
					+ " /getvDirlugeje:"
					+ renocc.getObjLugarEjecucionObra().getvDirlugeje()
					+ " /getvNumlugeje:"
					+ renocc.getObjLugarEjecucionObra().getvNumlugeje());

			if (renocc.getVflgAmb().equals("S")) {
				if (renocc.getObjLugarEjecucionObra().getObjDepartamento()
						.getV_coddep() != null
						&& renocc.getObjLugarEjecucionObra()
								.getObjDepartamento().getV_coddep() != ""
						&& renocc.getObjLugarEjecucionObra().getObjProvincia()
								.getV_codpro() != null
						&& renocc.getObjLugarEjecucionObra().getObjProvincia()
								.getV_codpro() != ""
						&& renocc.getObjLugarEjecucionObra().getObjDistrito()
								.getV_coddis() != null
						&& renocc.getObjLugarEjecucionObra().getObjDistrito()
								.getV_coddis() != ""
						&& renocc.getObjLugarEjecucionObra().getvCodtvia() != null
						&& renocc.getObjLugarEjecucionObra().getvCodtvia() != ""
						&& renocc.getObjLugarEjecucionObra().getvDirlugeje() != null
						&& renocc.getObjLugarEjecucionObra().getvDirlugeje() != ""
						&& renocc.getObjLugarEjecucionObra().getvNumlugeje() != null
						&& renocc.getObjLugarEjecucionObra().getvNumlugeje() != "") {
					validasizelist = true;
				} else {
					validasizelist = false;
					context.scrollTo("pgLugarEjecucion");
					texto = "Debe completar los datos de lugar de ejecución";
				}
			} else {
				if (renocc.getListaLugarEjecucionObra().size() > 1) {
					validasizelist = true;
					System.out
							.println(":::::::::::::Entro al true de validasizeList");
				} else {
					System.out
							.println(":::::::::::::Entro al false de validasizeList");
					validasizelist = false;
					if (renocc.getListaLugarEjecucionObra().size() == 0) {
						texto = "Debe ingresar Lugar de Ejecución de la Obra";
					} else {
						texto = "Si tiene solo un lugar de ejecución seleccione si";
					}

				}
			}
			// VALIDACION FECHA
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			String fecha1 = sdf.format(renocc.getdFeciniobr());
			String fecha2 = sdf.format(renocc.getdFecfinobr());

			boolean resp = compararFechas(fecha1, fecha2);

			Calendar calendar = new GregorianCalendar();
			Integer ano = 0;
			ano = calendar.get(Calendar.YEAR);

			// REEVALUANDO VALOR DEL BOOLEAN
			if (resp == false) {
				validasizelist = false;
				texto = "La fecha de inicio es mayor a la fecha de fin ";
			}

			if (renocc.getObjTipoEmpresa().getnCortipemp() == -1) {
				// VALIDAR TIPO DE EMPRESA
				validasizelist = false;
				texto = "Debe indicar el Tipo de Empresa";
			}

			if (validasizelist) {
				// ///REALIZA LAS INSERCIONES SEGUN LA ACCION
				if (strAccion.equals("M")) {
					System.out.println(renocc.getVflgAmb());
					// AUDITORIA
					renocc.setvCodusumod(PGP_Usuario.getV_usuario());
					renocc.setvHostmod(FacesUtils.getIpAddress());
					servicioRenocc.actualizar(renocc);
				} else if (strAccion.equals("A")) { 
					//CUANDO SE ACTUALIZA SE GENERA UN NUEVO REGISTRO CON ESTADO 2:REGISTRADO
					//Y SE ACTUALIZA EL REGISTRO ANTERIOR QUE TENIA ESTADO 3:PENDIENTE ACT
					//CON EL ESTADO 5:ACTUALIZADO
					renocc.setvAnoreg(ano.toString());
					renocc.setnNumreg(renocc.getnCorrenocc());
					ParamConsultaRenocc renocTemp = new ParamConsultaRenocc();
					renocTemp.setnNumreg(renocc.getnNumreg());
					renocTemp.setvFlgestado("5");
					renocTemp.setvFlgestadoConsu("3");
					renocc.setnCorrenocc(null);
					renocc.setVflgestado("2");
					renocc.setdFecact(new Date());
					renocc.setdFechabact(objUtilitario.fechaHabilitacion(new Date(), 3));
					
					// AUDITORIA
					renocc.setvCodusureg(PGP_Usuario.getV_usuario());
					renocc.setvHostreg(FacesUtils.getIpAddress());							
					servicioRenocc.insertar(renocc);
					renocTemp.valuestoString();
					servicioRenocc.updateEstadoXNumreg(renocTemp);
				} else {
					System.out.println("msg EN managed bean " + strAccion);
					renocc.setvAnoreg(ano.toString());
					// AUDITORIA
					renocc.setvCodusureg(PGP_Usuario.getV_usuario());
					renocc.setvHostreg(FacesUtils.getIpAddress());
					servicioRenocc.insertar(renocc);
				}

				// ////INSERTA EL LUGAR DE EJECUCION/////////
				if (renocc.getVflgAmb().equals("N")) {
					renocc.valuesToString();
					System.out.println("renocc 1 " + renocc.getnCorrenocc());
					servicioLugejeobr.insertar(renocc);
				} else {
					System.out.println("GRABA EN CASO SEA EN UN SOLO DISTRITO");
					renocc.getObjLugarEjecucionObra().setnCorrenocc(
							renocc.getnCorrenocc());
					System.out
							.println("renocc.getObjLugarEjecucionObra().GET nCorrenocc: "
									+ renocc.getObjLugarEjecucionObra()
											.getnCorrenocc());
					servicioLugejeobr.insertar(renocc
							.getObjLugarEjecucionObra());

				}

				// //INSERTA EL RESPONSABLE DE OBRA
				renocc.getObjResponsableObra().setnCorrenocc(
						renocc.getnCorrenocc());
				servicioResobra.insertar(renocc.getObjResponsableObra());
				renocc.getObjResponsableObra().valuesToString();

				renocc.getObjTipoEmpresaDetalle().setnCorrenocc(
						renocc.getnCorrenocc());
				// System.out.println("tipEmpresa.getObjEmpresa().getV_codemp()"+
				// renocc.getObjTipoEmpresaDetalle().getObjEmpresa().getV_codemp());
				servicioTipEmpresa.insertar(renocc.getObjTipoEmpresaDetalle());

				renocc.getObjCantidadTrabajadores().setnCorrenocc(
						renocc.getnCorrenocc());
				servicioCantra.insertar(renocc.getObjCantidadTrabajadores());

				objParametrosConsultaRenocc = new ParamConsultaRenocc();

				objParametrosConsultaRenocc.setnCorrenocc(renocc
						.getnCorrenocc());

				lstBusquedaRenocc = servicioRenocc
						.buscar(objParametrosConsultaRenocc);
				objParametrosConsultaRenocc = new ParamConsultaRenocc();
				// System.out.println("lstBusquedaRenocc "+lstBusquedaRenocc);

				Integer validaPendienteActualizacion = servicioRenocc
						.verificaPendienteActualizacion(PGP_Usuario);
				if (validaPendienteActualizacion > 0) {
					penienteActualizacion = true;
				} else {
					penienteActualizacion = false;
					RequestContext.getCurrentInstance().execute(
							"barraAcualizacion.hide();");
					RequestContext.getCurrentInstance().update(":formMenu2");
				}
				muestraMenConstrancia = true;

				vista = "pretty:gesionObra";

			} else {
				FacesUtils.showFacesMessage(texto, 1);
				context.update(":formMensajes:msgMensajesConsolidado");
				vista = "pretty:mantGesionObra";

			}

		} catch (Exception e) {
			System.out.println("Error: " + e.getMessage());
		}
		return vista;
	}

	public void mostrarImprimirConstancia() {

		if (muestraMenConstrancia == true) {
			RequestContext context = RequestContext.getCurrentInstance();
			context.update(":formConfComprobante:dlgConfComprobante");
			context.execute("dlgConfComprobante.show()");
		}
		muestraMenConstrancia = false;
	}

	/**
	 * BUSCA EL TIPO DE EMPRESA CONTRATANTE
	 * */
	public void buscarTipoEmpresa() {
		String descripcionTipoEmpresa = "";

		if (renocc.getObjTipoEmpresaDetalle().getObjDescripciontipoEmpresa()
				.getTipoDocumentoTipoEmpresa().equals("09")) {

			Empleador paramEmpleador = new Empleador();
			List<Empleador> lstEmpleador = new ArrayList<Empleador>();
			paramEmpleador.setV_codemp(renocc.getObjTipoEmpresaDetalle()
					.getObjDescripciontipoEmpresa()
					.getNroDocumentoTipoEmpresa());

			System.out.println("RUC CONSULTADO "
					+ renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.getNroDocumentoTipoEmpresa());

			try {
				lstEmpleador = servicioEmpleador
						.lstBusEmpleador1(paramEmpleador);

				// System.out.println("EMPRESA OBTENIDA "+lstEmpleador.get(0).getV_razsoc());

				if (lstEmpleador.size() > 0) {
					renocc.getObjTipoEmpresaDetalle().setObjEmpresa(
							lstEmpleador.get(0));
					descripcionTipoEmpresa = lstEmpleador.get(0).getV_razsoc();
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setDescripcionTipoEmpresa(descripcionTipoEmpresa);
				} else {
					renocc.getObjTipoEmpresaDetalle().setObjEmpresa(null);
					FacesUtils
							.showFacesMessage(
									"No se encontraron datos de empresa para Empresa Contratante",
									1);
				}

			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}

		} else {
			Persona paramPersona = new Persona();
			paramPersona.setV_codtdocide(renocc.getObjTipoEmpresaDetalle()
					.getObjDescripciontipoEmpresa()
					.getTipoDocumentoTipoEmpresa());
			paramPersona.setV_numdoc(renocc.getObjTipoEmpresaDetalle()
					.getObjDescripciontipoEmpresa()
					.getNroDocumentoTipoEmpresa());
			try {

				// WS
				// ReniecWebService rws = new ReniecWebService();
				// Persona pex = rws.obtenerPersonaSWReniec(paramPersona);

				Persona persona = servicioPersona.getTrabajador(paramPersona);

				if (persona != null) {
					System.out.println("persona distinto de nulo");
					// System.out.println("nombres: "+pex.getV_nombres());
					renocc.getObjTipoEmpresaDetalle().setObjPersona(persona);
					descripcionTipoEmpresa = persona.getV_apepater() + " "
							+ persona.getV_apemater() + " "
							+ persona.getV_nombres();
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setDescripcionTipoEmpresa(descripcionTipoEmpresa);
				} else {
					System.out.println("persona es nulo");
					RequestContext context = RequestContext
							.getCurrentInstance();
					personaMan = new Persona();
					personaMan.setV_codtdocide(renocc
							.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.getTipoDocumentoTipoEmpresa());
					personaMan.setV_numdoc(renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.getNroDocumentoTipoEmpresa());
					context.execute("dlg1.show()");
					context.reset("formRegistrarPersona");
					context.update("formRegistrarPersona");
					FacesUtils.setSessionAttribute("flgUpdate", "TE");
					// FacesUtils.showFacesMessage("No se encontraron datos de persona para Empresa Contratante",1);
				}

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	public void buscarRenocc() {

		System.out.println("ENTRA A BUSCAR RENOCC");
		lstBusquedaRenocc = new ArrayList<Renocc>();
		try {
			objParametrosConsultaRenocc.valuestoString();
			objParametrosConsultaRenocc.setvCodemp(PGP_Usuario.getV_ruc());
			lstBusquedaRenocc = servicioRenocc
					.buscar(objParametrosConsultaRenocc);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public String cargarRenocc() {
		String redirect = "";
		System.out.println("XXXXXXXXXX cargarRenocc CORRELATIVO RENOCC "
				+ corrRenocBusqueda);
		Renocc renocBusqueda = new Renocc();
		renocBusqueda.setnCorrenocc(corrRenocBusqueda);

		try {
			renocc = servicioRenocc.obtenerPorId(renocBusqueda);
			RequestContext context = RequestContext.getCurrentInstance();

			System.out.println("ESTADO DEL RENOCC:" + renocc.getVflgestado());

			if (renocc.getVflgestado().equals("2")) {
				System.out.println("Ejecuta cargar renocc");
				redirect = "pretty:mantGesionObra";

				// ///////////////EJECUTA ACCION//////////////////////

				// ///////SETEA LUGAR DE EJECUCION
				if (renocc.getListaLugarEjecucionObra().size() == 1) {
					System.out.println("renocc.getListaLugarEjecucionObra() "
							+ renocc.getListaLugarEjecucionObra().size());
					renocc.setObjLugarEjecucionObra(renocc
							.getListaLugarEjecucionObra().get(0));
					
					lstDepartamento = servicioMantenimiento.listarDepartamento();
					
					lstProvincia = servicioMantenimiento.listarProvincia(renocc
							.getListaLugarEjecucionObra().get(0)
							.getObjDepartamento());
					lstDistrito = servicioMantenimiento.listarDistrito(renocc
							.getListaLugarEjecucionObra().get(0)
							.getObjProvincia());
				}

				// ///////SETEA LUGAR DE EJECUCION > 1
				if (renocc.getListaLugarEjecucionObra().size() > 1) {

					renocc.setObjLugarEjecucionObra(new Lugejeobr());
					lstDistrito = new ArrayList<Distrito>();
					lstProvincia = new ArrayList<Provincia>();

				}

				// /////SETEA EMPRESA
				if (renocc.getObjTipoEmpresaDetalle().getObjEmpresa()
						.getV_codemp() != null) {
					Empleador e = new Empleador();
					e.setV_codemp(renocc.getObjTipoEmpresaDetalle()
							.getObjEmpresa().getV_codemp());
					e = servicioEmpleador.lstBusEmpleador1(
							renocc.getObjTipoEmpresaDetalle().getObjEmpresa())
							.get(0);

					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setTipoDocumentoTipoEmpresa("09");
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setNroDocumentoTipoEmpresa(e.getV_codemp());
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setDescripcionTipoEmpresa(e.getV_razsoc());

				}
				// //////SETEA TIPO EMPRESA
				if (renocc.getObjTipoEmpresaDetalle().getObjPersona()
						.getV_numdoc() != null) {

					Persona p = new Persona();

					p = servicioPersona.getTrabajador(renocc
							.getObjTipoEmpresaDetalle().getObjPersona());

					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setTipoDocumentoTipoEmpresa(p.getV_codtdocide());
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setNroDocumentoTipoEmpresa(p.getV_numdoc());
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setDescripcionTipoEmpresa(
									p.getV_apepater() + " " + p.getV_apemater()
											+ " " + p.getV_nombres());

				}
				// ///////////////FIN EJECUTA ACCION//////////////////////
			} else {
				redirect = "pretty:gesionObra";
				FacesUtils
						.showFacesMessage(
								"No se puede actualizar el registro debido a su estado",
								1);
				context.update("msgMensajesConsolidado");
			}
			strAccion = "M";

		} catch (Exception e) {
			e.printStackTrace();
		}

		return redirect;

	}

	public String cargaActualizarRenocc() {

		String vista = "";
		// SI Y SOLO SI ESTA EN ESTADO 2 Y 3
		RequestContext context = RequestContext.getCurrentInstance();

		try {
			System.out.println("cargaActualizarRenocc CORRELATIVO RENOCC "
					+ renocc.getnCorrenocc());
			Renocc renocBusqueda = new Renocc();

			renocBusqueda.setnCorrenocc(renocc.getnCorrenocc());

			renocc = servicioRenocc.obtenerPorId(renocBusqueda);
			renocc.valuesToString();
			renocc.getObjMunicipalidad().valuesToString();
			if (renocc.getVflgestado().equals("3")) {
				vista = "pretty:mantGesionObra";
				if (renocc.getListaLugarEjecucionObra().size() == 1) {

					renocc.setObjLugarEjecucionObra(renocc
							.getListaLugarEjecucionObra().get(0));
					lstDepartamento = servicioMantenimiento.listarDepartamento();
					
					lstProvincia = servicioMantenimiento.listarProvincia(renocc
							.getListaLugarEjecucionObra().get(0)
							.getObjDepartamento());
					lstDistrito = servicioMantenimiento.listarDistrito(renocc
							.getListaLugarEjecucionObra().get(0)
							.getObjProvincia());
				}

				if (renocc.getListaLugarEjecucionObra().size() > 1) {

					renocc.setObjLugarEjecucionObra(new Lugejeobr());
					lstDistrito = new ArrayList<Distrito>();
					lstProvincia = new ArrayList<Provincia>();

				}

				if (renocc.getObjTipoEmpresaDetalle().getObjEmpresa()
						.getV_codemp() != null) {
					Empleador e = new Empleador();
					e.setV_codemp(renocc.getObjTipoEmpresaDetalle()
							.getObjEmpresa().getV_codemp());
					e = servicioEmpleador.lstBusEmpleador1(
							renocc.getObjTipoEmpresaDetalle().getObjEmpresa())
							.get(0);

					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setTipoDocumentoTipoEmpresa("09");
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setNroDocumentoTipoEmpresa(e.getV_codemp());
					renocc.getObjTipoEmpresaDetalle()
							.getObjDescripciontipoEmpresa()
							.setDescripcionTipoEmpresa(e.getV_razsoc());

				} else {

					if (renocc.getObjTipoEmpresaDetalle().getObjPersona()
							.getV_numdoc() != null) {
						Persona p = new Persona();

						p = servicioPersona.getTrabajador(renocc
								.getObjTipoEmpresaDetalle().getObjPersona());

						renocc.getObjTipoEmpresaDetalle()
								.getObjDescripciontipoEmpresa()
								.setTipoDocumentoTipoEmpresa(
										p.getV_codtdocide());
						renocc.getObjTipoEmpresaDetalle()
								.getObjDescripciontipoEmpresa()
								.setNroDocumentoTipoEmpresa(p.getV_numdoc());
						renocc.getObjTipoEmpresaDetalle()
								.getObjDescripciontipoEmpresa()
								.setDescripcionTipoEmpresa(
										p.getV_apepater() + " "
												+ p.getV_apemater() + " "
												+ p.getV_nombres());
					}

				}
				strAccion = "A";
				// renocc.getObjTipoEmpresaDetalle().setObjDescripciontipoEmpresa(objDescripciontipoEmpresa);
			} else {
				vista = "pretty:gesionObra";

				FacesUtils
						.showFacesMessage(
								"Aún no está hábilitado para realizar esta operación, ver la fecha de habilitación de actualización",
								1);
				context.update("msgMensajesConsolidado");
			}

		} catch (Exception e) {
			FacesUtils.showFacesMessage(
					"Debe seleccionar un registro para actualizar", 1);
			context.update("msgMensajesConsolidado");
			// e.printStackTrace();
			vista = "pretty:gesionObra";
			return vista;
		}

		return vista;

	}

	public void quitarLugar() {
		System.out.println("ENTRA A QUITAR LUGAR");
		Lugejeobr lugarFila = (Lugejeobr) lugarDataTable.getRowData();
		System.out.println("DATOS ELIMINAR FILA LUGAR--> "
				+ lugarFila.getObjDepartamento().getV_desdep());
		renocc.getListaLugarEjecucionObra().remove(lugarFila);

	}

	/**
	 * CULMINACION DE OBRA
	 * */

	public void btnCulminacionObra() {
		try {

			System.out.println("BTN_CULMINACION_DE_OBRA");
			RequestContext context = RequestContext.getCurrentInstance();

			// VALIDAMOS SI EL RENOCC ESTA SIN CULMINAR
			if (renocc != null && renocc.getVflgestado() != null
					&& renocc.getVflgestado().equals("2")) {
				System.out.println("PROCEDE");
				context.update("formCulminacionObra");
				context.execute("dlgCulminacionObra.show()");
			} else {
				System.out.println("NO PROCEDE");
				context.update("formCulminacionObra");

				if (renocc == null) {
					context.execute("deniedCOR.show()");
				} else {
					context.execute("deniedCulmObra.show()");
				}

			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void culminacionObra() {
		try {
			System.out.println("CULMINACION DE OBRA");
			RequestContext context = RequestContext.getCurrentInstance();
			// context.execute("dlg1.show()");

			System.out.println("procede");
			RenoccDespatch rd = new RenoccDespatch();
			renocc.valuesToString();
			System.out.println("parametros de culminacion de obra: " + "PK:"
					+ renocc.getnCorrenocc() + "[" + renocc.getnNumreg()
					+ "] FECHA:" + renocc.getdFecculmob());
			rd.culminacionObra(renocc);
			context.execute("dlgCulminacionObra.hide()");
			context.execute("dlg1.show()");

			objParametrosConsultaRenocc.setvCodemp(PGP_Usuario.getV_ruc());
			lstBusquedaRenocc = servicioRenocc
					.buscar(objParametrosConsultaRenocc);
			context.update("formListalstRenocc:dtlstRenocc");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// REGISTRAR PERSONA
	public void registrarPersona() throws Exception {
		System.out.println("****** REGISTRAR PERSONA");
		PersonaDespatch dspPersona = new PersonaDespatch();
		String mensajeError = "";
		String texto = "";
		Integer tipo = 0;
		Persona personaValidacion = dspPersona.getTrabajador(personaMan);

		if (personaValidacion == null) {
			System.out.println("registrarPersona PERSONA NULL");
			personaMan.valuesToString();
			Calendar c1 = GregorianCalendar.getInstance();
			SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
			c1.add(Calendar.YEAR, -15);

			String maxFecNac = sdf.format(c1.getTime());
			String fecnac = "";
			String hoy = sdf.format(new Date());

			boolean resp = true;
			boolean resp2 = true;

			fecnac = sdf.format(personaMan.getD_fecnac());
			resp = compararFechas(fecnac, hoy);
			resp2 = compararFechas(fecnac, maxFecNac);

			if (resp2 == false || resp == false) {
				tipo = 1;
				if (resp2 == false) {
					texto = "El postulante debe ser mayor de 15 años";
				}
				if (resp == false) {
					texto = "La fecha de nacimiento no debe ser una fecha futura";
				}
			} else {
				mensajeError = dspPersona.insertarPersona(personaMan);
				// validamos si hubo error
				RequestContext context = RequestContext.getCurrentInstance();

				if (mensajeError == "") {
					texto = "La persona ha sido registrada con éxito";
					tipo = 3;

					context.execute("dlgRegistrarPersona.hide()");
					// ACTUALIZA CAMPOS SEGUN OBJETO INSERTADO
					String paramupd = ""
							+ FacesUtils.getSessionAttribute("flgUpdate");

					if (paramupd.equals("TE")) {
						renocc.getObjTipoEmpresaDetalle().setObjPersona(
								personaMan);
						DescripcionTipoEmpresa dte = new DescripcionTipoEmpresa();
						dte.setDescripcionTipoEmpresa(personaMan.getV_nombres()
								+ " " + personaMan.getV_apepater() + " "
								+ personaMan.getV_apemater());
						dte.setNroDocumentoTipoEmpresa(personaMan.getV_numdoc());
						dte.setTipoDocumentoTipoEmpresa(personaMan
								.getV_codtdocide());
						renocc.getObjTipoEmpresaDetalle()
								.setObjDescripciontipoEmpresa(dte);
						context.update("formmntRenocc:txtDescTipoEmpresa");
						// renocc.objTipoEmpresaDetalle.objDescripciontipoEmpresa.descripcionTipoEmpresa
					} else if (paramupd.equals("RL")) {
						renocc.setObjRepresentanteLegal(personaMan);
						context.update("formmntRenocc:txtApePaterRepresentanteLegal");
						context.update("formmntRenocc:txtApeMaterRepresentanteLegal");
						context.update("formmntRenocc:txtNombresRepresentanteLegal");
					} else if (paramupd.equals("RO")) {
						renocc.getObjResponsableObra()
								.setObjPersona(personaMan);
						context.update("formmntRenocc:txtApePaterResponsableObra");
						context.update("formmntRenocc:txtApeMaterResponsableObra");
						context.update("formmntRenocc:txtNombresResponsableObra");
						context.update("formmntRenocc:txtTelefResponsableObra");
						context.update("formmntRenocc:txtCorreofResponsableObra");
					} else {

					}

				} else {
					texto = "Ocurrió un error en el registro, por favor intente otra vez";
					tipo = 1;
				}
			}

		} else {
			System.out.println("registrarPersona YA EXISTE PERSONA");
			texto = "Ya está registrada una persona con ese número de documento "
					+ personaValidacion.getV_apepater()
					+ " "
					+ personaValidacion.getV_apemater()
					+ " "
					+ personaValidacion.getV_nombres();
			tipo = 1;
		}

		if (texto != "") {
			FacesUtils.showFacesMessage(texto, tipo);
		}
	}

	private boolean compararFechas(String fecha1, String fechaActual) {

		String resultado = "";
		boolean compara = false;
		try {
			/** Obtenemos las fechas enviadas en el formato a comparar */
			SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
			Date fechaDate1 = formateador.parse(fecha1);
			Date fechaDate2 = formateador.parse(fechaActual);

			if (fechaDate1.before(fechaDate2)) {
				resultado = "La Fecha 1 es menor ";
				compara = true;
			} else {
				if (fechaDate2.before(fechaDate1)) {
					resultado = "La Fecha 1 es Mayor ";
					compara = false;
				} else {
					resultado = "Las Fechas Son iguales ";
					compara = true;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		System.out.println("resultado de comparacion: " + resultado);
		return compara;
	}

	public void cancelarBsqMuni() {
		try {
			renocc.setObjMunicipalidad(new Empleador());
			lstMunicipadad = new ArrayList<Empleador>();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
